﻿#pragma once

#include "topo_base.h"

namespace CAGD
{

/**
 * 拓扑边.
 */
class TopoEdge : public TopoBase
{
  public:
    /**
     * @brief 空构造（用于 Mesh）.
     * @see
     */
    TopoEdge();

    /**
     * @brief 曲线构造.
     * @param curve
     * @see
     */
    TopoEdge(Handle(GeomCurve) curve);

    /**
     * @brief 顶点构造.
     * @param start
     * @param end
     * @see
     */
    TopoEdge(TopoVertex *start, TopoVertex *end);

    /**
     * @brief 析构.
     * @see
     */
    ~TopoEdge();

    /**
     * @brief 返回空间曲线.
     * @return
     * @see
     */
    Handle(GeomCurve) Geom() const;

    /**
     * @brief 所属半边.
     * @return
     * @see
     */
    TopoCoedge *&Coedge();

    /**
     * @brief 起始顶点.
     * @return
     * @see
     */
    TopoVertex *&Start();

    /**
     * @brief 终止顶点.
     * @return
     * @see
     */
    TopoVertex *&End();

    /**
     * @brief 方向.
     * @return
     * @see
     */
    TopoDir Dir() const;

    /**
     * @brief 拓扑类型.
     * @return
     * @see
     */
    TopoType Type() const override;

  protected:
    Handle(GeomCurve) m_curve; // 空间曲线
    TopoCoedge *m_coedge;      // 所属半边
    TopoVertex *m_start;       // 起点
    TopoVertex *m_end;         // 终点
    TopoDir m_dir;             // 拓扑方向
};

} // namespace CAGD
